package com.robertux.leaderboard.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.log4j.Logger;

public class ResourceLocator {
	private static Logger logger = Logger.getLogger(ResourceLocator.class);
	
	public static Properties loadProperties(String propsFileName) {
		Properties props = new Properties();
		InputStream iStream = null;
		
		if((iStream = ResourceLocator.class.getClassLoader().getResourceAsStream("META-INF/" + propsFileName)) != null) {
			try {
				props.load(iStream);
				return props;
			} catch (IOException e) {
				logger.warn("Archivo propiedades con nombre " + propsFileName + " no encontrado en META-INF: " + e.getMessage(), e);
			}
		}
		
		if((iStream = ResourceLocator.class.getClassLoader().getResourceAsStream("WEB-INF/" + propsFileName)) != null) {
			try {
				props.load(iStream);
				return props;
			} catch (IOException e) {
				logger.warn("Archivo propiedades con nombre " + propsFileName + " no encontrado en WEB-INF: " + e.getMessage(), e);
			}
		}
		
		logger.warn("Archivo propiedades con nombre " + propsFileName + " no encontrado en ninguna de las ubicaciones");
		return props;
	}
	
	public static Connection dataSourceLookup(String jndi) {
		try {
			Context ctx = new InitialContext();
			return ((DataSource)ctx.lookup(jndi)).getConnection();
		} catch (NamingException e) {
			logger.error("Error tratando de cargar el recurso de base de datos " + jndi + ": " + e.getMessage(), e);
			return null;
		} catch (SQLException e) {
			logger.error("Error tratando de cargar el recurso de base de datos " + jndi + ": " + e.getMessage(), e);
			return null;
		}
	}
}
